home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / rewrite / RewriteDebug.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-18  |  5.0 KB  |  238 lines

  1. /* ----------------------------------------------------------------
  2.  *   FILE
  3.  *    RewriteDebug.c
  4.  *    
  5.  *   NOTES
  6.  *
  7.  *   IDENTIFICATION
  8.  *     $Header: /private/postgres/src/rewrite/RCS/RewriteDebug.c,v 2.4 1991/11/06 21:58:54 glass Exp $
  9.  * ----------------------------------------------------------------
  10.  */
  11.  
  12. #include <stdio.h>
  13. #include "parser/parsetree.h"        /* parsetree manipulation routines */
  14. #include "rules/prs2.h"
  15. #include "nodes/primnodes.h"        /* Var, Const ... */
  16. #include "nodes/primnodes.a.h"
  17. #include "catalog/syscache.h"
  18. #include "parser/parse.h"
  19. #include "./RewriteSuppo.h"
  20.  
  21. /* to print out plans */
  22.  
  23. #include "nodes/plannodes.h"
  24. #include "nodes/plannodes.a.h"
  25.  
  26. #ifdef NOTYET
  27. char *
  28. VarOrUnionGetDesc ( varnode , rangetable )
  29.      Var varnode;
  30.      List rangetable;
  31. {
  32.     int rt_index    = 0;
  33.     int attnum        = 0;
  34.     List this_rt_entry     = NULL;
  35.  
  36.     if ( IsA(varnode,Var) ) {
  37.     rt_index = get_varno(varnode);
  38.     attnum = get_varattno(varnode);
  39.     
  40.     this_rt_entry = nth(rt_index,rangetable);
  41.     } 
  42.     
  43. }
  44. #endif
  45.  
  46. Print_quals ( quals )
  47.      List quals;
  48. {
  49.     printf("where ");
  50.     Print_expr(quals);
  51.     printf("\n");
  52. }
  53. /*
  54.  * expressions can consist of varnodes, constnodes, opnodes, 
  55.  * or lists of the above
  56.  */
  57.  
  58. Print_expr ( expr )
  59.      List expr;
  60. {
  61.     List i = NULL;
  62.  
  63.     if ( expr == NULL )
  64.       printf("nil\n");
  65.  
  66.     switch ( NodeType(expr)) {
  67.       case classTag(LispList):
  68.     printf ( "( " );
  69.     foreach ( i , expr ) {
  70.         Print_expr(CAR(i));
  71.     }
  72.     printf (" )");
  73.     break;
  74.       case classTag(Var): 
  75.     lispDisplay ( get_varid((Var) expr));
  76.     break;
  77.       case classTag(Const):
  78.     switch ( get_consttype((Const) expr)) {
  79.       case 19: /* char 16 */
  80.       case 25: /* text */
  81.         printf("%s",get_constvalue((Const) expr));
  82.         break;
  83.       case 26: /* oid */
  84.       case 23: /* int4 */
  85.         printf("%d",get_constvalue((Const) expr));
  86.         break;
  87.     }
  88.     break;
  89.       case classTag(Oper):
  90.     printf(" %s ",OperOidGetName ( (ObjectId)get_opno((Oper) expr)));
  91.     break;
  92.       case classTag(Func):
  93.     lispDisplay(expr);
  94.     break;
  95.       case classTag(Result):
  96.     printf("result :");
  97.     Print_expr(get_resconstantqual((Result) expr));
  98.     break;
  99.       case classTag(Append):
  100.     printf("append :");
  101.     Print_expr(get_unionplans((Append) expr));
  102.     printf("\n");
  103.     break;
  104.       case classTag(SeqScan):
  105.     printf("seqscan : qual");
  106.     Print_expr(get_qpqual((Plan) expr));
  107.     printf("\n");
  108.     break;
  109.       case classTag(NestLoop):
  110.     printf("nestloop : qual");
  111.     Print_expr(get_qpqual((Plan) expr));
  112.     printf("\n");
  113.     printf("nestloop : righttree ");
  114.     Print_expr(get_righttree((Plan) expr));
  115.     printf("\n");
  116.     printf("nestloop : lefttree ");
  117.     Print_expr(get_lefttree((Plan) expr));
  118.     printf("\n");
  119.     break;
  120.       default:
  121.     lispDisplay(expr);
  122.     break;
  123.     }
  124. }
  125.  
  126. Print_targetlist ( tlist )
  127.      List tlist;
  128. {
  129.     List i = NULL;
  130.  
  131.     printf(" ( ");
  132.     foreach ( i , tlist ) {
  133.     List entry = CAR(i);
  134.     List resdom = tl_resdom(entry);
  135.     List expr = tl_expr(entry);
  136.  
  137.     Assert(IsA(resdom,Resdom));
  138.     printf("%s = ", get_resname((Resdom) resdom));
  139.     Print_expr ( expr );
  140.     if (CDR(i) != NULL) 
  141.       printf(", ");
  142.     }
  143.     printf(" )\n");
  144. }
  145. #define rt_refname(rt_entry) CAR(rt_entry)
  146. #undef rt_relname(rt_entry)
  147. #define rt_relname(rt_entry) CADR(rt_entry)
  148.  
  149. Print_rangetable ( rtable )
  150.      List rtable;
  151. {
  152.     List i = NULL;
  153.     List j = NULL;
  154.  
  155.     printf("from ");
  156.  
  157.     foreach (i,rtable) {
  158.     List rt_entry = CAR(i);
  159.     if ( IsA (rt_refname(rt_entry),LispStr) ) {
  160.         printf("%s in %s",
  161.            CString(rt_refname(rt_entry)),
  162.            CString(rt_relname(rt_entry)));
  163.     } else {
  164.         foreach ( j , rt_refname(rt_entry)) {
  165.         printf("%s",
  166.                CString(CAR(j)));
  167.         if (CDR(j) != NULL) 
  168.           printf(", ");
  169.         }
  170.         printf(" in %s ",CString(rt_relname(rt_entry)));
  171.     }
  172.     if (CDR(i) != NULL) 
  173.       printf(", ");
  174.     }
  175.     printf("\n");
  176.     fflush(stdout);
  177. }
  178.  
  179. Print_parse ( parsetree )
  180.      List parsetree;
  181. {
  182.     List quals = parse_qualification(parsetree);
  183.     List tlist = parse_targetlist(parsetree);
  184.     List rtable = root_rangetable (parse_root (parsetree));
  185.     List result_reln = root_result_relation(parse_root(parsetree));
  186.     char *result_reln_name = NULL;
  187.  
  188.     if ( result_reln ) {
  189.     if (IsA(result_reln,LispInt))
  190.       result_reln_name = CString(CADR(nth(CInteger(result_reln)-1,rtable)));
  191.     }
  192.     lispDisplay(CADR(parse_root(parsetree)));
  193.     switch (root_command_type(parse_root(parsetree))) {
  194.       case RETRIEVE:
  195.     if (result_reln) {
  196.         printf(" into %s ",result_reln_name);
  197.     } else {
  198.         printf(" ");
  199.     }
  200.     break;
  201.       case APPEND:
  202.       case DELETE:
  203.       case REPLACE:
  204.     printf(" %s\n",result_reln_name );
  205.     break;
  206.     }
  207.     Print_targetlist(tlist);
  208.     Print_rangetable(rtable);
  209.     if ( quals ) 
  210.       Print_quals(quals);
  211.     fflush(stdout);
  212. }
  213.  
  214. void
  215. PrintRuleLock ( rlock )
  216.      Prs2OneLock rlock;
  217. {
  218.     printf("#S(RuleLock ");
  219.     printf(":rulid %ld ",rlock->ruleId);
  220.     printf(":locktype %c ", rlock->lockType );
  221.     printf(":attnum %d )", rlock->attributeNumber );
  222.     fflush(stdout);
  223. }
  224.  
  225. void
  226. PrintRuleLockList ( rlist )
  227.      List rlist;
  228. {
  229.     Prs2OneLock temp = NULL;
  230.     List j = NULL;
  231.     foreach ( j , rlist ) {
  232.     temp = (Prs2OneLock)CAR(j);
  233.     PrintRuleLock ( temp );
  234.     }
  235.     printf("\n");
  236. }
  237.  
  238.